package top.kaoshanji.p1ch09d;

/**
 * 代码清单-p1ch09d-216页a：通过组合动态的改变对象的行为（状态设计模式）
 * 这个模式真有意思
 * author kaoshanji
 * ^_^
 * create time 2025/3/9 19:15
 */
public class Transmogrify {

    public static void main(String[] args) {
        Stage stage = new Stage();

        stage.performPlay(); // 默认的
        stage.change(); // 对象更换了
        stage.performPlay(); // 使用更换后的对象了

    }

}

class Actor {
    public void act() {}
}

class HappyActor extends Actor {

    @Override
    public void act() {
        System.out.println("HappyActor");
    }
}

class SadActor extends Actor {

    @Override
    public void act() {
        System.out.println("SadActor");
    }
}

class Stage {

    // 声明时使用的是 HappyActor 对象
    // 默认的对象
    private Actor actor = new HappyActor();

    // 在此方法里把对象引用 actor 给修改了
    // 调用此方法之后，对象就换了
    public void change() {
        actor = new SadActor();
    }

    // 依然调用 actor 对象引用
    public void performPlay() {
        actor.act();
    }

}

